home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 24
/
AACD 24.iso
/
AACD
/
Resources
/
Online
/
OpenURL
/
Developer
/
Source
/
prefs_browsereditwin.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-09-26
|
9KB
|
303 lines
/*
** OpenURL - MUI preferences for openurl.library
** Written by Troels Walsted Hansen <troels@thule.no>
** Placed in the public domain.
**
** This module contains the code to the BrowserEditWin Window.mui subclass.
*/
#include "prefs_common.h"
#include "prefs_main.h"
#include "prefs_app.h"
#include "prefs_browsereditwin.h"
/**************************************************************************/
static ULONG mNew (struct IClass *cl, Object *obj, struct opSet *msg);
static ULONG mGet (struct IClass *cl, Object *obj, struct opGet *msg);
static ULONG mWindow_Setup (struct IClass *cl, Object *obj, struct MUIP_Window_Setup *msg);
static ULONG mOk (struct IClass *cl, Object *obj, struct MUIP_BrowserEditWin_Ok *msg);
static SAVEDS ASM VOID ObjStrFunc(REG(a0) struct Hook *hook,
REG(a2) Object *obj,
REG(a1) Object *string);
/**************************************************************************/
static const char *Browser_PlaceHolders[] =
{
"%u|URL",
NULL,
};
/**************************************************************************/
static ULONG mNew(struct IClass *cl, Object *obj, struct opSet *msg)
{
Object *browserl, *infog, *names, *pathp, *ports, *portp,
*cmdg, *shows, *tofronts, *openurlp, *openurlwp, *okb, *cancelb;
struct URL_BrowserNode *bn = (struct URL_BrowserNode *)GetTagData(MUIA_BrowserEditWin_Browser, NULL, msg->ops_AttrList);
browserl = (Object *)GetTagData(MUIA_BrowserEditWin_ListObj, NULL, msg->ops_AttrList);
if(!bn || !browserl) return(0);
obj = (Object *)DoSuperNew(cl, obj,
MUIA_Window_ID, MAKE_ID('E', 'D', 'B', 'R'),
MUIA_Window_Title, APPNAME " · Edit Browser",
WindowContents, VGroup,
Child, infog = ColGroup(2),
GroupFrameT("Browser information"),
Child, KeyLabel2("Name", 'n'),
Child, names = StringObject,
StringFrame,
MUIA_CycleChain, TRUE,
MUIA_ControlChar, 'n',
MUIA_String_MaxLen, UBN_NAME_LEN,
MUIA_String_Contents, bn->ubn_Name,
MUIA_String_AdvanceOnCR, TRUE,
End,
Child, KeyLabel2("Path", 'p'),
Child, pathp = PopplaceholderObject,
MUIA_Popph_Array, Browser_PlaceHolders,
MUIA_Popph_StringKey, 'p',
MUIA_Popph_StringMaxLen, UBN_PATH_LEN,
MUIA_Popph_Contents, bn->ubn_Path,
MUIA_Popph_PopAsl, TRUE,
MUIA_Popasl_Type, ASL_FileRequest,
MUIA_String_AdvanceOnCR, TRUE,
End,
Child, KeyLabel2("ARexx port", 'a'),
Child, portp = PopportObject,
MUIA_Popstring_String, ports = StringObject,
StringFrame,
MUIA_CycleChain, TRUE,
MUIA_ControlChar, 'a',
MUIA_String_MaxLen, UBN_PORT_LEN,
MUIA_String_Contents, bn->ubn_Port,
MUIA_String_AdvanceOnCR, TRUE,
End,
MUIA_Popstring_Button, myPopButton(MUII_PopUp),
MUIA_Popport_ARexxOnly, TRUE,
End,
End,
Child, cmdg = ColGroup(2),
GroupFrameT("ARexx commands"),
Child, KeyLabel2("Show/Uniconify", 's'),
Child, shows = StringObject,
StringFrame,
MUIA_CycleChain, TRUE,
MUIA_ControlChar, 's',
MUIA_String_MaxLen, UBN_SHOWCMD_LEN,
MUIA_String_Contents, bn->ubn_ShowCmd,
MUIA_String_AdvanceOnCR, TRUE,
End,
Child, KeyLabel2("Screen to front", 'f'),
Child, tofronts = StringObject,
StringFrame,
MUIA_CycleChain, TRUE,
MUIA_ControlChar, 'f',
MUIA_String_MaxLen, UBN_TOFRONTCMD_LEN,
MUIA_String_Contents, bn->ubn_ToFrontCmd,
MUIA_String_AdvanceOnCR, TRUE,
End,
Child, KeyLabel2("Open URL...", 'u'),
Child, openurlp = PopplaceholderObject,
MUIA_Popph_Array, Browser_PlaceHolders,
MUIA_Popph_StringKey, 'u',
MUIA_Popph_StringMaxLen, UBN_OPENURLCMD_LEN,
MUIA_Popph_Contents, bn->ubn_OpenURLCmd,
MUIA_String_AdvanceOnCR, TRUE,
End,
Child, KeyLabel2("...in new window", 'w'),
Child, openurlwp = PopplaceholderObject,
MUIA_Popph_Array, Browser_PlaceHolders,
MUIA_Popph_StringKey, 'w',
MUIA_Popph_StringMaxLen, UBN_OPENURLWCMD_LEN,
MUIA_Popph_Contents, bn->ubn_OpenURLWCmd,
MUIA_String_AdvanceOnCR, TRUE,
End,
End,
Child, ColGroup(3),
Child, okb = SimpleButton("_Ok"),
Child, RectangleObject, End,
Child, cancelb = SimpleButton("_Cancel"),
End,
End,
TAG_MORE, msg->ops_AttrList);
if(obj)
{
struct BrowserEditWin_Data *data = INST_DATA(cl, obj);
memset(data, '\0', sizeof(struct BrowserEditWin_Data));
/* init instance data */
data->Browser = bn;
data->BrowserLstObj = browserl;
data->InfoGrpObj = infog;
data->NameStrObj = names;
data->PathPopObj = pathp;
data->PortStrObj = ports;
data->CmdGrpObj = cmdg;
data->ShowStrObj = shows;
data->ToFrontStrObj = tofronts;
data->OpenURLPopObj = openurlp;
data->OpenURLWPopObj = openurlwp;
data->OkButObj = okb;
data->CancelButObj = cancelb;
/* buttons */
DoMethod(obj, MUIM_MultiSet, MUIA_CycleChain, TRUE, okb, cancelb, NULL);
/* add hook */
data->ObjStrHook.h_Entry = (HOOKFUNC)ObjStrFunc;
data->ObjStrHook.h_Data = (APTR)xget(portp, MUIA_Popobject_ObjStrHook);
set(portp, MUIA_Popobject_ObjStrHook, &data->ObjStrHook);
}
return((ULONG)obj);
}
/**************************************************************************/
static ULONG mGet(struct IClass *cl, Object *obj, struct opGet *msg)
{
struct BrowserEditWin_Data *data = INST_DATA(cl,obj);
switch(msg->opg_AttrID)
{
case MUIA_BrowserEditWin_Browser:
*(msg->opg_Storage) = (ULONG)data->Browser;
return(TRUE);
}
return(DoSuperMethodA(cl, obj, (Msg)msg));
}
/**************************************************************************/
static ULONG mWindow_Setup(struct IClass *cl, Object *obj, struct MUIP_Window_Setup *msg)
{
struct BrowserEditWin_Data *data = INST_DATA(cl,obj);
if (!DoSuperMethodA(cl,obj,(Msg)msg))
return(FALSE);
if(!data->NotifiesAdded)
{
/* buttons */
DoMethod(data->OkButObj, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_BrowserEditWin_Ok);
DoMethod(data->CancelButObj, MUIM_Notify, MUIA_Pressed, FALSE, obj, 3, MUIM_Set, MUIA_Window_CloseRequest, TRUE);
/* window notifies */
DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, _app(obj), 6, MUIM_Application_PushMethod, _app(obj), 3, MUIM_App_CloseWin, MUIA_BrowserEditWin_Browser, data->Browser);
data->NotifiesAdded = TRUE;
}
return(TRUE);
}
/**************************************************************************/
static ULONG mOk(struct IClass *cl, Object *obj, struct MUIP_BrowserEditWin_Ok *msg)
{
struct BrowserEditWin_Data *data = INST_DATA(cl,obj);
struct URL_BrowserNode *bn = data->Browser;
LONG visible, first, i;
/* update the structure */
strcpy(bn->ubn_Name, (char *)xget(data->NameStrObj, MUIA_String_Contents));
strcpy(bn->ubn_Path, (char *)xget(data->PathPopObj, MUIA_Popph_Contents));
strcpy(bn->ubn_Port, (char *)xget(data->PortStrObj, MUIA_String_Contents));
strcpy(bn->ubn_ShowCmd, (char *)xget(data->ShowStrObj, MUIA_String_Contents));
strcpy(bn->ubn_ToFrontCmd, (char *)xget(data->ToFrontStrObj, MUIA_String_Contents));
strcpy(bn->ubn_OpenURLCmd, (char *)xget(data->OpenURLPopObj, MUIA_Popph_Contents));
strcpy(bn->ubn_OpenURLWCmd, (char *)xget(data->OpenURLWPopObj, MUIA_Popph_Contents));
/* update the listview */
get(data->BrowserLstObj, MUIA_List_Visible, &visible);
if(visible != -1)
{
get(data->BrowserLstObj, MUIA_List_First, &first);
for(i = first; i < (first + visible); i++)
{
DoMethod(data->BrowserLstObj, MUIM_List_GetEntry, i, &bn);
if(!bn) break;
if(bn == data->Browser)
{
DoMethod(data->BrowserLstObj, MUIM_List_Redraw, i);
break;
}
}
}
/* close edit site window */
set(obj, MUIA_Window_CloseRequest, TRUE);
return(TRUE);
}
/**************************************************************************/
SAVEDS ASM ULONG BrowserEditWin_Dispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
{
switch(msg->MethodID)
{
case OM_NEW : return(mNew (cl,obj,(APTR)msg));
case OM_GET : return(mGet (cl,obj,(APTR)msg));
case MUIM_Window_Setup: return(mWindow_Setup(cl,obj,(APTR)msg));
case MUIM_BrowserEditWin_Ok : return(mOk (cl,obj,(APTR)msg));
}
return(DoSuperMethodA(cl,obj,msg));
}
/**************************************************************************/
static SAVEDS ASM VOID ObjStrFunc(REG(a0) struct Hook *hook,
REG(a2) Object *obj,
REG(a1) Object *string)
{
STRPTR port, dot, digit;
char buf[UBN_PORT_LEN];
if(hook->h_Data) CallHookPkt(hook->h_Data, obj, string);
get(string, MUIA_String_Contents, &port);
dot = strrchr(port, '.');
if(dot)
{
dot++;
for(digit = dot; *digit; digit++)
if(!isdigit(*digit))
return;
stccpy(buf, port, dot - port);
set(string, MUIA_String_Contents, buf);
}
}